Fix interaction of GtkEntryCompletion with input methods. (#354495, Diego
authorMatthias Clasen <mclasen@redhat.com>
Wed, 4 Oct 2006 03:26:34 +0000 (03:26 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Wed, 4 Oct 2006 03:26:34 +0000 (03:26 +0000)
2006-10-03  Matthias Clasen  <mclasen@redhat.com>

        Fix interaction of GtkEntryCompletion with input
        methods.  (#354495, Diego Escalante Urrelo)

        * gtk/gtkentry.c (gtk_entry_completion_key_press): Only reset
        the im context if we actually handle the key event.

        * gtk/gtkentrycompletion.c: Also propagate key release events
        to the entry.

ChangeLog
gtk/gtkentry.c
gtk/gtkentrycompletion.c

index 3e0b5f4010d315e6c8d9773efeed610da58045be..0976552875ad9064b04033a025febab7686f7a7f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2006-10-03  Matthias Clasen  <mclasen@redhat.com>
 
+       Fix interaction of GtkEntryCompletion with input
+       methods.  (#354495, Diego Escalante Urrelo)
+
+       * gtk/gtkentry.c (gtk_entry_completion_key_press): Only reset
+       the im context if we actually handle the key event.
+
+       * gtk/gtkentrycompletion.c: Also propagate key release events
+       to the entry.
+
+2006-10-03  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkprintsettings.c (gtk_print_settings_get_duplex):
        Fix a typo.  (#359052, Ghee Teo)
index a78679184802e2dc46c8c6a49809f0ece14fceeb..701c4347a470fc77697f6e8d4cd47590f8f79fbd 100644 (file)
@@ -5451,8 +5451,6 @@ gtk_entry_completion_key_press (GtkWidget   *widget,
   if (!GTK_WIDGET_MAPPED (completion->priv->popup_window))
     return FALSE;
 
-  _gtk_entry_reset_im_context (GTK_ENTRY (widget));
-
   matches = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (completion->priv->filter_model), NULL);
 
   if (completion->priv->actions)
@@ -5545,6 +5543,7 @@ gtk_entry_completion_key_press (GtkWidget   *widget,
     }
   else if (event->keyval == GDK_Escape) 
     {
+      _gtk_entry_reset_im_context (GTK_ENTRY (widget));
       _gtk_entry_completion_popdown (completion);
 
       return TRUE;
@@ -5556,6 +5555,7 @@ gtk_entry_completion_key_press (GtkWidget   *widget,
       GtkDirectionType dir = event->keyval == GDK_ISO_Left_Tab ? 
        GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD;
 
+      _gtk_entry_reset_im_context (GTK_ENTRY (widget));
       _gtk_entry_completion_popdown (completion);
       
       gtk_widget_child_focus (gtk_widget_get_toplevel (widget), dir);
@@ -5566,6 +5566,7 @@ gtk_entry_completion_key_press (GtkWidget   *widget,
            event->keyval == GDK_KP_Enter ||
           event->keyval == GDK_Return)
     {
+      _gtk_entry_reset_im_context (GTK_ENTRY (widget));
       _gtk_entry_completion_popdown (completion);
 
       if (completion->priv->current_selected < matches)
@@ -5608,6 +5609,8 @@ gtk_entry_completion_key_press (GtkWidget   *widget,
         {
           GtkTreePath *path;
 
+          _gtk_entry_reset_im_context (GTK_ENTRY (widget));
+
           path = gtk_tree_path_new_from_indices (completion->priv->current_selected - matches, -1);
 
           g_signal_emit_by_name (completion, "action_activated",
index 179bb014186286a176abe645e32d48e61a53a38b..e779cf3c16b179745da2e8ff4a143bf77ed21e76 100644 (file)
@@ -101,7 +101,7 @@ static void     gtk_entry_completion_reorder             (GtkCellLayout
 static gboolean gtk_entry_completion_visible_func        (GtkTreeModel            *model,
                                                           GtkTreeIter             *iter,
                                                           gpointer                 data);
-static gboolean gtk_entry_completion_popup_key_press     (GtkWidget               *widget,
+static gboolean gtk_entry_completion_popup_key_event     (GtkWidget               *widget,
                                                           GdkEventKey             *event,
                                                           gpointer                 user_data);
 static gboolean gtk_entry_completion_popup_button_press  (GtkWidget               *widget,
@@ -436,7 +436,10 @@ gtk_entry_completion_init (GtkEntryCompletion *completion)
   priv->popup_window = gtk_window_new (GTK_WINDOW_POPUP);
   gtk_window_set_resizable (GTK_WINDOW (priv->popup_window), FALSE);
   g_signal_connect (priv->popup_window, "key_press_event",
-                    G_CALLBACK (gtk_entry_completion_popup_key_press),
+                    G_CALLBACK (gtk_entry_completion_popup_key_event),
+                    completion);
+  g_signal_connect (priv->popup_window, "key_release_event",
+                    G_CALLBACK (gtk_entry_completion_popup_key_event),
                     completion);
   g_signal_connect (priv->popup_window, "button_press_event",
                     G_CALLBACK (gtk_entry_completion_popup_button_press),
@@ -749,7 +752,7 @@ gtk_entry_completion_visible_func (GtkTreeModel *model,
 }
 
 static gboolean
-gtk_entry_completion_popup_key_press (GtkWidget   *widget,
+gtk_entry_completion_popup_key_event (GtkWidget   *widget,
                                       GdkEventKey *event,
                                       gpointer     user_data)
 {